package com.rpcservice.rpc.remoting.dto;

public enum RpcMessageType {
    // ---- 标准类型（0x00 ~ 0x3F）----
    REQUEST              ((byte) 0x00, "普通请求"),
    RESPONSE             ((byte) 0x01, "普通响应"),
    HEARTBEAT_REQUEST    ((byte) 0x02, "心跳请求"),
    HEARTBEAT_RESPONSE   ((byte) 0x03, "心跳响应"),
    EXCEPTION            ((byte) 0x04, "异常响应"),
    ONE_WAY              ((byte) 0x05, "单向请求（无需响应）"),

    // ---- 预留给流式/扩展（示例）----
    STREAM_OPEN          ((byte) 0x10, "流式打开"),
    STREAM_DATA          ((byte) 0x11, "流式数据"),
    STREAM_CLOSE         ((byte) 0x12, "流式关闭"),

    // ---- 自定义类型保留段：0x40 ~ 0x7F/0x80~0xFF ----
    CUSTOM               ((byte) 0x7F, "自定义占位"); // 解码时用于兜底

    public final byte code;
    public final String desc;
    RpcMessageType(byte code, String desc) { this.code = code; this.desc = desc; }

    private static final java.util.Map<Byte, RpcMessageType> MAP = new java.util.HashMap<>();
    static { for (var t : values()) MAP.put(t.code, t); }

    public static RpcMessageType fromCode(byte c) {
        return MAP.getOrDefault(c, CUSTOM);
    }
}
